package com.ybt.communicate.tcp.accessor;

import java.nio.channels.ReadableByteChannel;
import java.nio.channels.WritableByteChannel;

import com.ybt.communicate.core.exception.ProtocolException;

public interface IDataAccessStrategy {
    
    /**根据具体的读取策略，从渠道读取数据。
     * 无论渠道是否是新IO，本方法都以阻塞方式运行。
     * @param channel 数据的来源渠道
     * @return 读取的数据
     * @throws ProtocolException 从渠道读取时发生异常
     */
    public byte[] receive(ReadableByteChannel channel)
    throws ProtocolException;
    
    /**将数据写入渠道。无论渠道是否是新IO，本方法都以阻塞方式运行。
     * @param channel 写入数据的目标渠道
     * @param data 数据
     * @throws ProtocolException 写入数据时发生异常
     */
    public void send(WritableByteChannel channel, byte[] data)
            throws ProtocolException;
}
